#include "../sylar/log.h"
#include <iostream>
#include "../sylar/util.h"

int main()
{
    sylar::InitUtil(); // 初始化工具类

    // 创建日志器
    sylar::Logger::ptr logger = std::make_shared<sylar::Logger>("test");

    // 标准输出Appender
    sylar::StdoutLogAppender::ptr stdout_appender = std::make_shared<sylar::StdoutLogAppender>();
    stdout_appender->setFormatter(std::make_shared<sylar::LogFormatter>(
        "%d{%Y-%m-%d %H:%M:%S} [ %t ] [ %l ] %f :%l - %m %n"));
    logger->addAppender(stdout_appender);

    // 文件Appender
    sylar::FileLogAppender::ptr file_appender = std::make_shared<sylar::FileLogAppender>("test.log");
    file_appender->setFormatter(std::make_shared<sylar::LogFormatter>(
        "%d{%Y-%m-%d %H:%M:%S} [ %t ] [ %l ] %f :%l - %m %n"));
    if (!file_appender->reopen())
    {
        std::cerr << "打开日志文件失败!" << std::endl;
        return 1;
    }
    logger->addAppender(file_appender);

    // 测试LogEvent::format
    sylar::LogEvent::ptr event = std::make_shared<sylar::LogEvent>(
        logger, sylar::LogLevel::DEBUG, __FILE__, __LINE__,
        sylar::GetElapse(), sylar::GetThreadId(), sylar::GetFiberId(), sylar::GetTime());
    event->format("格式化测试：%d + %d = %d", 10, 20, 30);
    logger->debug(event);

    // 测试LogEventWrap（流式操作）
    SYLAR_LOG_DEBUG(logger) << "流式调试日志，值为：" << 12345;
    SYLAR_LOG_INFO(logger) << "信息日志，线程ID：" << sylar::GetThreadId();
    // 流式日志（原方式，仅修改宏名称）
    SYLAR_LOG_DEBUG(logger) << "流式调试日志，值为：" << 12345;
    SYLAR_LOG_INFO(logger) << "信息日志，线程ID：" << sylar::GetThreadId();

    // 新增的格式化日志
    SYLAR_LOG_FMT_DEBUG(logger, "格式化调试日志：%d + %d = %d", 10, 20, 30);
    SYLAR_LOG_FMT_INFO(logger, "用户%s登录成功，ID：%d", "admin", 1001);
    SYLAR_LOG_FMT_ERROR(logger, "文件%s打开失败，错误码：%d", "config.ini", 2);

    return 0;
}